15#ifndef AOM_AV1_ENCODER_ENCODER_H_
16#define AOM_AV1_ENCODER_ENCODER_H_
21#include "config/aom_config.h"
24#include "aom_util/aom_pthread.h"
26#include "av1/common/alloccommon.h"
27#include "av1/common/av1_common_int.h"
28#include "av1/common/blockd.h"
29#include "av1/common/entropymode.h"
31#include "av1/common/reconintra.h"
32#include "av1/common/resize.h"
33#include "av1/common/thread_common.h"
34#include "av1/common/timing.h"
36#include "av1/encoder/aq_cyclicrefresh.h"
37#include "av1/encoder/av1_ext_ratectrl.h"
38#include "av1/encoder/av1_quantize.h"
40#include "av1/encoder/context_tree.h"
41#include "av1/encoder/enc_enums.h"
42#include "av1/encoder/encodemb.h"
43#include "av1/encoder/external_partition.h"
44#include "av1/encoder/firstpass.h"
45#include "av1/encoder/global_motion.h"
46#include "av1/encoder/level.h"
48#include "av1/encoder/mcomp.h"
49#include "av1/encoder/pickcdef.h"
50#include "av1/encoder/ratectrl.h"
51#include "av1/encoder/rd.h"
53#include "av1/encoder/svc_layercontext.h"
54#include "av1/encoder/temporal_filter.h"
56#include "av1/encoder/thirdpass.h"
58#include "av1/encoder/tokenize.h"
59#include "av1/encoder/tpl_model.h"
60#include "av1/encoder/av1_noise_estimate.h"
61#include "av1/encoder/bitstream.h"
63#if CONFIG_INTERNAL_STATS
64#include "aom_dsp/ssim.h"
66#include "aom_dsp/variance.h"
68#include "aom_dsp/noise_model.h"
71#include "av1/encoder/tune_vmaf.h"
73#if CONFIG_AV1_TEMPORAL_DENOISING
74#include "av1/encoder/av1_temporal_denoiser.h"
76#if CONFIG_TUNE_BUTTERAUGLI
77#include "av1/encoder/tune_butteraugli.h"
80#include "aom/internal/aom_codec_internal.h"
90#define SCENE_CUT_KEY_TEST_INTERVAL 16
93#define TF_LOOKAHEAD_IDX_THR 7
95#define HDR_QP_LEVELS 10
96#define CHROMA_CB_QP_SCALE 1.04
97#define CHROMA_CR_QP_SCALE 1.04
98#define CHROMA_QP_SCALE -0.46
99#define CHROMA_QP_OFFSET 9.26
100#define QP_SCALE_FACTOR 2.0
101#define DISABLE_HDR_LUMA_DELTAQ 1
105typedef struct aom_rational64 {
111 FRAMEFLAGS_KEY = 1 << 0,
112 FRAMEFLAGS_GOLDEN = 1 << 1,
113 FRAMEFLAGS_BWDREF = 1 << 2,
115 FRAMEFLAGS_ALTREF = 1 << 3,
116 FRAMEFLAGS_INTRAONLY = 1 << 4,
117 FRAMEFLAGS_SWITCH = 1 << 5,
118 FRAMEFLAGS_ERROR_RESILIENT = 1 << 6,
119} UENUM1BYTE(FRAMETYPE_FLAGS);
124 PARALLEL_SIMULATION_ENCODE,
125 NUM_FPMT_TEST_ENCODES
126} UENUM1BYTE(FPMT_TEST_ENC_CFG);
130#define MIN_PYR_LEVEL 1
131static inline int get_true_pyr_level(
int frame_level,
int frame_order,
132 int max_layer_depth) {
133 if (frame_order == 0) {
135 return MIN_PYR_LEVEL;
136 }
else if (frame_level == MAX_ARF_LAYERS) {
138 return max_layer_depth;
139 }
else if (frame_level == (MAX_ARF_LAYERS + 1)) {
141 return MIN_PYR_LEVEL;
143 return AOMMAX(MIN_PYR_LEVEL, frame_level);
150 CYCLIC_REFRESH_AQ = 3,
152} UENUM1BYTE(AQ_MODE);
155 DELTA_Q_OBJECTIVE = 1,
156 DELTA_Q_PERCEPTUAL = 2,
157 DELTA_Q_PERCEPTUAL_AI = 3,
158 DELTA_Q_USER_RATING_BASED = 4,
160 DELTA_Q_VARIANCE_BOOST = 6,
162} UENUM1BYTE(DELTAQ_MODE);
170} UENUM1BYTE(RESIZE_MODE);
174 SS_CFG_LOOKAHEAD = 1,
177} UENUM1BYTE(SS_CFG_OFFSET);
181 ENABLE_SCENECUT_MODE_1,
182 ENABLE_SCENECUT_MODE_2
183} UENUM1BYTE(SCENECUT_MODE);
185#define MAX_VBR_CORPUS_COMPLEXITY 10000
201} MULTI_THREADED_MODULES;
235 SKIP_APPLY_RESTORATION = 1 << 0,
236 SKIP_APPLY_SUPERRES = 1 << 1,
237 SKIP_APPLY_CDEF = 1 << 2,
238 SKIP_APPLY_LOOPFILTER = 1 << 3,
638 int gf_min_pyr_height;
640 int gf_max_pyr_height;
642 bool enable_auto_arf;
645 bool enable_auto_brf;
650 unsigned int num_tile_groups;
659 int tile_width_count;
661 int tile_height_count;
663 int tile_widths[MAX_TILE_COLS];
665 int tile_heights[MAX_TILE_ROWS];
667 bool enable_large_scale_tile;
669 bool enable_single_tile_decoding;
671 bool enable_ext_tile_debug;
681 int forced_max_frame_width;
684 int forced_max_frame_height;
695 bool enable_warped_motion;
697 bool allow_warped_motion;
704 aom_timing_info_t timing_info;
706 uint32_t num_units_in_decoding_tick;
709 bool decoder_model_info_present_flag;
712 bool display_model_info_present_flag;
714 bool timing_info_present;
730 unsigned int max_reference_frames;
732 bool enable_reduced_reference_set;
734 bool enable_onesided_comp;
752 unsigned int motion_vector_unit_test;
754 unsigned int sb_multipass_unit_test;
759 const char *vmaf_model_path;
761 const char *film_grain_table_filename;
767 int film_grain_test_vector;
774 double init_framerate;
776 unsigned int input_bit_depth;
780 unsigned int chroma_subsampling_x;
782 unsigned int chroma_subsampling_y;
790 int use_fixed_qp_offsets;
800 DELTAQ_MODE deltaq_mode;
802 unsigned int deltaq_strength;
804 bool enable_chroma_deltaq;
806 bool enable_hdr_deltaq;
908 bool enable_deltalf_mode;
910 CDEF_CONTROL cdef_control;
912 bool enable_restoration;
914 bool force_video_mode;
916 bool error_resilient_mode;
918 bool frame_parallel_decoding_mode;
920 bool enable_monochrome;
923 bool full_still_picture_hdr;
925 bool enable_dual_filter;
927 bool enable_order_hint;
929 bool ref_frame_mvs_present;
931 bool enable_ref_frame_mvs;
933 bool enable_interintra_comp;
935 bool enable_global_motion;
950 FrameDimensionCfg frm_dim_cfg;
970 QuantizationCfg q_cfg;
1002 DecoderModelCfg dec_model_cfg;
1005 RefFrameCfg ref_frm_cfg;
1008 UnitTestCfg unit_test_cfg;
1011 MotionModeCfg motion_mode_cfg;
1026 CostUpdateFreq cost_upd_freq;
1032 int noise_block_size;
1034 int enable_dnl_denoising;
1037#if CONFIG_AV1_TEMPORAL_DENOISING
1039 int noise_sensitivity;
1043 unsigned int tier_mask;
1047 int border_in_pixels;
1056 unsigned int enable_low_complexity_decode;
1059 AV1_LEVEL target_seq_level_idx[MAX_NUM_OPERATING_POINTS];
1062 BITSTREAM_PROFILE profile;
1079 const char *two_pass_output;
1082 const char *second_pass_log;
1095 bool use_highbitdepth;
1100 bool save_as_annexb;
1104 const char *partition_info_path;
1109 unsigned int enable_rate_guide_deltaq;
1113 const char *rate_distribution_info;
1116 int strict_level_conformance;
1119 int kf_max_pyr_height;
1127static inline int is_lossless_requested(
const RateControlCfg *
const rc_cfg) {
1165 [SWITCHABLE_FILTERS];
1170typedef struct FRAME_COUNTS {
1173#if CONFIG_ENTROPY_STATS
1174 unsigned int kf_y_mode[KF_MODE_CONTEXTS][KF_MODE_CONTEXTS][INTRA_MODES];
1175 unsigned int angle_delta[DIRECTIONAL_MODES][2 * MAX_ANGLE_DELTA + 1];
1176 unsigned int y_mode[BLOCK_SIZE_GROUPS][INTRA_MODES];
1177 unsigned int uv_mode[CFL_ALLOWED_TYPES][INTRA_MODES][UV_INTRA_MODES];
1178 unsigned int cfl_sign[CFL_JOINT_SIGNS];
1179 unsigned int cfl_alpha[CFL_ALPHA_CONTEXTS][CFL_ALPHABET_SIZE];
1180 unsigned int palette_y_mode[PALATTE_BSIZE_CTXS][PALETTE_Y_MODE_CONTEXTS][2];
1181 unsigned int palette_uv_mode[PALETTE_UV_MODE_CONTEXTS][2];
1182 unsigned int palette_y_size[PALATTE_BSIZE_CTXS][PALETTE_SIZES];
1183 unsigned int palette_uv_size[PALATTE_BSIZE_CTXS][PALETTE_SIZES];
1184 unsigned int palette_y_color_index[PALETTE_SIZES]
1185 [PALETTE_COLOR_INDEX_CONTEXTS]
1187 unsigned int palette_uv_color_index[PALETTE_SIZES]
1188 [PALETTE_COLOR_INDEX_CONTEXTS]
1190 unsigned int partition[PARTITION_CONTEXTS][EXT_PARTITION_TYPES];
1191 unsigned int txb_skip[TOKEN_CDF_Q_CTXS][TX_SIZES][TXB_SKIP_CONTEXTS][2];
1192 unsigned int eob_extra[TOKEN_CDF_Q_CTXS][TX_SIZES][PLANE_TYPES]
1193 [EOB_COEF_CONTEXTS][2];
1194 unsigned int dc_sign[PLANE_TYPES][DC_SIGN_CONTEXTS][2];
1195 unsigned int coeff_lps[TX_SIZES][PLANE_TYPES][BR_CDF_SIZE - 1][LEVEL_CONTEXTS]
1197 unsigned int eob_flag[TX_SIZES][PLANE_TYPES][EOB_COEF_CONTEXTS][2];
1198 unsigned int eob_multi16[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][5];
1199 unsigned int eob_multi32[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][6];
1200 unsigned int eob_multi64[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][7];
1201 unsigned int eob_multi128[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][8];
1202 unsigned int eob_multi256[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][9];
1203 unsigned int eob_multi512[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][10];
1204 unsigned int eob_multi1024[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][11];
1205 unsigned int coeff_lps_multi[TOKEN_CDF_Q_CTXS][TX_SIZES][PLANE_TYPES]
1206 [LEVEL_CONTEXTS][BR_CDF_SIZE];
1207 unsigned int coeff_base_multi[TOKEN_CDF_Q_CTXS][TX_SIZES][PLANE_TYPES]
1208 [SIG_COEF_CONTEXTS][NUM_BASE_LEVELS + 2];
1209 unsigned int coeff_base_eob_multi[TOKEN_CDF_Q_CTXS][TX_SIZES][PLANE_TYPES]
1210 [SIG_COEF_CONTEXTS_EOB][NUM_BASE_LEVELS + 1];
1211 unsigned int newmv_mode[NEWMV_MODE_CONTEXTS][2];
1212 unsigned int zeromv_mode[GLOBALMV_MODE_CONTEXTS][2];
1213 unsigned int refmv_mode[REFMV_MODE_CONTEXTS][2];
1214 unsigned int drl_mode[DRL_MODE_CONTEXTS][2];
1215 unsigned int inter_compound_mode[INTER_MODE_CONTEXTS][INTER_COMPOUND_MODES];
1216 unsigned int wedge_idx[BLOCK_SIZES_ALL][16];
1217 unsigned int interintra[BLOCK_SIZE_GROUPS][2];
1218 unsigned int interintra_mode[BLOCK_SIZE_GROUPS][INTERINTRA_MODES];
1219 unsigned int wedge_interintra[BLOCK_SIZES_ALL][2];
1220 unsigned int compound_type[BLOCK_SIZES_ALL][MASKED_COMPOUND_TYPES];
1221 unsigned int motion_mode[BLOCK_SIZES_ALL][MOTION_MODES];
1222 unsigned int obmc[BLOCK_SIZES_ALL][2];
1223 unsigned int intra_inter[INTRA_INTER_CONTEXTS][2];
1224 unsigned int comp_inter[COMP_INTER_CONTEXTS][2];
1225 unsigned int comp_ref_type[COMP_REF_TYPE_CONTEXTS][2];
1226 unsigned int uni_comp_ref[UNI_COMP_REF_CONTEXTS][UNIDIR_COMP_REFS - 1][2];
1227 unsigned int single_ref[REF_CONTEXTS][SINGLE_REFS - 1][2];
1228 unsigned int comp_ref[REF_CONTEXTS][FWD_REFS - 1][2];
1229 unsigned int comp_bwdref[REF_CONTEXTS][BWD_REFS - 1][2];
1230 unsigned int intrabc[2];
1232 unsigned int txfm_partition[TXFM_PARTITION_CONTEXTS][2];
1233 unsigned int intra_tx_size[MAX_TX_CATS][TX_SIZE_CONTEXTS][MAX_TX_DEPTH + 1];
1234 unsigned int skip_mode[SKIP_MODE_CONTEXTS][2];
1235 unsigned int skip_txfm[SKIP_CONTEXTS][2];
1236 unsigned int compound_index[COMP_INDEX_CONTEXTS][2];
1237 unsigned int comp_group_idx[COMP_GROUP_IDX_CONTEXTS][2];
1238 unsigned int delta_q[DELTA_Q_PROBS][2];
1239 unsigned int delta_lf_multi[FRAME_LF_COUNT][DELTA_LF_PROBS][2];
1240 unsigned int delta_lf[DELTA_LF_PROBS][2];
1242 unsigned int inter_ext_tx[EXT_TX_SETS_INTER][EXT_TX_SIZES][TX_TYPES];
1243 unsigned int intra_ext_tx[EXT_TX_SETS_INTRA][EXT_TX_SIZES][INTRA_MODES]
1245 unsigned int filter_intra_mode[FILTER_INTRA_MODES];
1246 unsigned int filter_intra[BLOCK_SIZES_ALL][2];
1248 unsigned int wiener_restore[2];
1249 unsigned int sgrproj_restore[2];
1252 unsigned int switchable_interp[SWITCHABLE_FILTER_CONTEXTS]
1253 [SWITCHABLE_FILTERS];
1256#define INTER_MODE_RD_DATA_OVERALL_SIZE 6400
1265 double sse_sse_mean;
1281#define MAX_INTER_MODES 1024
1339 uint32_t sum_square_error;
1352 VPVariance part_variances;
1357 VPVariance part_variances;
1362 VPVariance part_variances;
1367 VPVariance part_variances;
1372 VPVariance part_variances;
1377 VPVariance part_variances;
1408#if CONFIG_MULTITHREAD
1454typedef struct TileDataEnc {
1456 DECLARE_ALIGNED(16, FRAME_CONTEXT, tctx);
1457 FRAME_CONTEXT *row_ctx;
1458 uint64_t abs_sum_level;
1459 uint8_t allow_update_cdf;
1460 InterModeRdModel inter_mode_rd_models[BLOCK_SIZES_ALL];
1462 MV firstpass_top_mv;
1465typedef struct RD_COUNTS {
1466 int compound_ref_used_flag;
1467 int skip_mode_used_flag;
1468 int tx_type_used[TX_SIZES_ALL][TX_TYPES];
1469 int obmc_used[BLOCK_SIZES_ALL][2];
1471 int newmv_or_intra_blocks;
1472 uint64_t seg_tmp_pred_cost[2];
1475typedef struct ThreadData {
1477 MvCosts *mv_costs_alloc;
1478 IntraBCMVCosts *dv_costs_alloc;
1479 RD_COUNTS rd_counts;
1480 FRAME_COUNTS *counts;
1481 PC_TREE_SHARED_BUFFERS shared_coeff_buf;
1482 SIMPLE_MOTION_DATA_TREE *sms_tree;
1483 SIMPLE_MOTION_DATA_TREE *sms_root;
1485 uint32_t *hash_value_buffer[2];
1486 OBMCBuffer obmc_buffer;
1487 PALETTE_BUFFER *palette_buffer;
1488 CompoundTypeRdBuffers comp_rd_buffer;
1489 CONV_BUF_TYPE *tmp_conv_dst;
1490 uint64_t abs_sum_level;
1491 uint8_t *tmp_pred_bufs[2];
1492 uint8_t *upsample_pred;
1493 uint8_t *wiener_tmp_pred_buf;
1496 int coefficient_size;
1497 int max_mv_magnitude;
1498 int interp_filter_selected[SWITCHABLE];
1499 FRAME_CONTEXT *tctx;
1501 int32_t num_64x64_blocks;
1502 PICK_MODE_CONTEXT *firstpass_ctx;
1503 TemporalFilterData tf_data;
1504 TplBuffers tpl_tmp_buffers;
1505 TplTxfmStats tpl_txfm_stats;
1506 GlobalMotionData gm_data;
1510 PixelLevelGradientInfo *pixel_gradient_info;
1515 Block4x4VarInfo *src_var_info_of_4x4_sub_blocks;
1520struct EncWorkerData;
1588#if CONFIG_MULTITHREAD
1618#if CONFIG_MULTITHREAD
1647#define NUM_RECODES_PER_FRAME 10
1652#define MAX_PARALLEL_FRAMES 4
1867typedef struct ActiveMap {
1896#if CONFIG_INTERNAL_STATS
1904} UENUM1BYTE(StatType);
1906typedef struct IMAGE_STAT {
1907 double stat[NUM_STAT_TYPES];
1914 YV12_BUFFER_CONFIG buf;
1942#if CONFIG_COLLECT_PARTITION_STATS
1943typedef struct FramePartitionTimingStats {
1944 int partition_decisions[6][EXT_PARTITION_TYPES];
1945 int partition_attempts[6][EXT_PARTITION_TYPES];
1946 int64_t partition_times[6][EXT_PARTITION_TYPES];
1949} FramePartitionTimingStats;
1952#if CONFIG_COLLECT_COMPONENT_TIMING
1953#include "aom_ports/aom_timer.h"
1956 av1_encode_strategy_time,
1957 av1_get_one_pass_rt_params_time,
1958 av1_get_second_pass_params_time,
1959 denoise_and_encode_time,
1960 apply_filtering_time,
1961 av1_tpl_setup_stats_time,
1962 encode_frame_to_data_rate_time,
1963 encode_with_or_without_recode_time,
1966 loop_restoration_time,
1967 av1_pack_bitstream_final_time,
1968 av1_encode_frame_time,
1969 av1_compute_global_motion_time,
1970 av1_setup_motion_field_time,
1973 rd_pick_partition_time,
1974 rd_use_partition_time,
1975 choose_var_based_partitioning_time,
1976 av1_prune_partitions_time,
1977 none_partition_search_time,
1978 split_partition_search_time,
1979 rectangular_partition_search_time,
1980 ab_partitions_search_time,
1981 rd_pick_4partition_time,
1984 rd_pick_sb_modes_time,
1985 av1_rd_pick_intra_mode_sb_time,
1986 av1_rd_pick_inter_mode_sb_time,
1987 set_params_rd_pick_inter_mode_time,
1988 skip_inter_mode_time,
1989 handle_inter_mode_time,
1990 evaluate_motion_mode_for_winner_candidates_time,
1992 handle_intra_mode_time,
1993 refine_winner_mode_tx_time,
1994 av1_search_palette_mode_time,
1996 compound_type_rd_time,
1997 interpolation_filter_search_time,
1998 motion_mode_rd_time,
2000 nonrd_use_partition_time,
2001 pick_sb_modes_nonrd_time,
2002 hybrid_intra_mode_search_time,
2003 nonrd_pick_inter_mode_sb_time,
2004 encode_b_nonrd_time,
2007} UENUM1BYTE(TIMING_COMPONENT);
2009static inline char const *get_component_name(
int index) {
2011 case av1_encode_strategy_time:
return "av1_encode_strategy_time";
2012 case av1_get_one_pass_rt_params_time:
2013 return "av1_get_one_pass_rt_params_time";
2014 case av1_get_second_pass_params_time:
2015 return "av1_get_second_pass_params_time";
2016 case denoise_and_encode_time:
return "denoise_and_encode_time";
2017 case apply_filtering_time:
return "apply_filtering_time";
2018 case av1_tpl_setup_stats_time:
return "av1_tpl_setup_stats_time";
2019 case encode_frame_to_data_rate_time:
2020 return "encode_frame_to_data_rate_time";
2021 case encode_with_or_without_recode_time:
2022 return "encode_with_or_without_recode_time";
2023 case loop_filter_time:
return "loop_filter_time";
2024 case cdef_time:
return "cdef_time";
2025 case loop_restoration_time:
return "loop_restoration_time";
2026 case av1_pack_bitstream_final_time:
return "av1_pack_bitstream_final_time";
2027 case av1_encode_frame_time:
return "av1_encode_frame_time";
2028 case av1_compute_global_motion_time:
2029 return "av1_compute_global_motion_time";
2030 case av1_setup_motion_field_time:
return "av1_setup_motion_field_time";
2031 case encode_sb_row_time:
return "encode_sb_row_time";
2033 case rd_pick_partition_time:
return "rd_pick_partition_time";
2034 case rd_use_partition_time:
return "rd_use_partition_time";
2035 case choose_var_based_partitioning_time:
2036 return "choose_var_based_partitioning_time";
2037 case av1_prune_partitions_time:
return "av1_prune_partitions_time";
2038 case none_partition_search_time:
return "none_partition_search_time";
2039 case split_partition_search_time:
return "split_partition_search_time";
2040 case rectangular_partition_search_time:
2041 return "rectangular_partition_search_time";
2042 case ab_partitions_search_time:
return "ab_partitions_search_time";
2043 case rd_pick_4partition_time:
return "rd_pick_4partition_time";
2044 case encode_sb_time:
return "encode_sb_time";
2046 case rd_pick_sb_modes_time:
return "rd_pick_sb_modes_time";
2047 case av1_rd_pick_intra_mode_sb_time:
2048 return "av1_rd_pick_intra_mode_sb_time";
2049 case av1_rd_pick_inter_mode_sb_time:
2050 return "av1_rd_pick_inter_mode_sb_time";
2051 case set_params_rd_pick_inter_mode_time:
2052 return "set_params_rd_pick_inter_mode_time";
2053 case skip_inter_mode_time:
return "skip_inter_mode_time";
2054 case handle_inter_mode_time:
return "handle_inter_mode_time";
2055 case evaluate_motion_mode_for_winner_candidates_time:
2056 return "evaluate_motion_mode_for_winner_candidates_time";
2057 case do_tx_search_time:
return "do_tx_search_time";
2058 case handle_intra_mode_time:
return "handle_intra_mode_time";
2059 case refine_winner_mode_tx_time:
return "refine_winner_mode_tx_time";
2060 case av1_search_palette_mode_time:
return "av1_search_palette_mode_time";
2061 case handle_newmv_time:
return "handle_newmv_time";
2062 case compound_type_rd_time:
return "compound_type_rd_time";
2063 case interpolation_filter_search_time:
2064 return "interpolation_filter_search_time";
2065 case motion_mode_rd_time:
return "motion_mode_rd_time";
2067 case nonrd_use_partition_time:
return "nonrd_use_partition_time";
2068 case pick_sb_modes_nonrd_time:
return "pick_sb_modes_nonrd_time";
2069 case hybrid_intra_mode_search_time:
return "hybrid_intra_mode_search_time";
2070 case nonrd_pick_inter_mode_sb_time:
return "nonrd_pick_inter_mode_sb_time";
2071 case encode_b_nonrd_time:
return "encode_b_nonrd_time";
2080#define MAX_INTERNAL_ARFS (REF_FRAMES - BWDREF_FRAME - 1)
2355 int mv_joint_count[4];
2357 int last_bit_nonzero;
2361 int hp_total_mv_rate;
2362 int lp_total_mv_rate;
2373typedef struct WeberStats {
2374 int64_t mb_wiener_variance;
2375 int64_t src_variance;
2376 int64_t rec_variance;
2377 int16_t src_pix_max;
2378 int16_t rec_pix_max;
2388 int show_frame_count;
2392 struct loopfilter lf;
2394 YV12_BUFFER_CONFIG copy_buffer;
2397 unsigned int frame_number;
2398 FRAME_INDEX_SET frame_index_set;
2471#if !CONFIG_REALTIME_ONLY
2475 DUCKY_ENCODE_FRAME_MODE_NONE,
2476 DUCKY_ENCODE_FRAME_MODE_QINDEX,
2478 DUCKY_ENCODE_FRAME_MODE_QINDEX_RDMULT,
2480} UENUM1BYTE(DUCKY_ENCODE_FRAME_MODE);
2483 DUCKY_ENCODE_GOP_MODE_NONE,
2484 DUCKY_ENCODE_GOP_MODE_RCL,
2485} UENUM1BYTE(DUCKY_ENCODE_GOP_MODE);
2487typedef struct DuckyEncodeFrameInfo {
2488 DUCKY_ENCODE_FRAME_MODE qp_mode;
2489 DUCKY_ENCODE_GOP_MODE gop_mode;
2493 int *superblock_encode_qindex;
2494 int *superblock_encode_rdmult;
2495 int delta_q_enabled;
2496} DuckyEncodeFrameInfo;
2498typedef struct DuckyEncodeFrameResult {
2499 int global_order_idx;
2505} DuckyEncodeFrameResult;
2507typedef struct DuckyEncodeInfo {
2508 DuckyEncodeFrameInfo frame_info;
2509 DuckyEncodeFrameResult frame_result;
2515typedef struct RTC_REF {
2520 int reference[INTER_REFS_PER_FRAME];
2521 int ref_idx[INTER_REFS_PER_FRAME];
2522 int refresh[REF_FRAMES];
2523 int set_ref_frame_config;
2524 int non_reference_frame;
2525 int ref_frame_comp[3];
2530 unsigned int buffer_time_index[REF_FRAMES];
2534 unsigned char buffer_spatial_layer[REF_FRAMES];
2538 bool reference_was_previous_frame;
2543 bool bias_recovery_frame;
2617 FPMT_TEST_ENC_CFG fpmt_unit_test_cfg;
2635 int temp_valid_gm_model_found[FRAME_UPDATE_TYPES];
2797 aom_variance_fn_ptr_t
fn_ptr[BLOCK_SIZES_ALL];
2815#if CONFIG_INTERNAL_STATS
2817 uint64_t total_time_receive_data;
2818 uint64_t total_time_compress_data;
2820 unsigned int total_mode_chosen_counts[MAX_MODES];
2823 uint64_t total_sq_error[2];
2824 uint64_t total_samples[2];
2827 double total_blockiness;
2828 double worst_blockiness;
2830 uint64_t total_bytes;
2831 double summed_quality;
2832 double summed_weights;
2833 double summed_quality_hbd;
2834 double summed_weights_hbd;
2835 unsigned int total_recode_hits;
2837 double worst_ssim_hbd;
2842 int b_calculate_blockiness;
2843 int b_calculate_consistency;
2845 double total_inconsistency;
2846 double worst_consistency;
2852#if CONFIG_ENTROPY_STATS
2856 FRAME_COUNTS aggregate_fc;
3172#if CONFIG_INTERNAL_STATS
3174 uint64_t time_compress_data;
3176 unsigned int mode_chosen_counts[MAX_MODES];
3178 unsigned int frame_recode_hits;
3182#if CONFIG_SPEED_STATS
3186 unsigned int tx_search_count;
3310 double temp_framerate;
3405#if CONFIG_COLLECT_PARTITION_STATS
3409 FramePartitionTimingStats partition_stats;
3412#if CONFIG_COLLECT_COMPONENT_TIMING
3416 uint64_t component_time[kTimingComponents];
3421 struct aom_usec_timer component_timer[kTimingComponents];
3425 uint64_t frame_component_time[kTimingComponents];
3454 TuneVMAFInfo vmaf_info;
3457#if CONFIG_TUNE_BUTTERAUGLI
3461 TuneButteraugliInfo butteraugli_info;
3502#if CONFIG_AV1_TEMPORAL_DENOISING
3506 AV1_DENOISER denoiser;
3576#if CONFIG_RD_COMMAND
3580 RD_COMMAND rd_command;
3625#if CONFIG_BITRATE_ACCURACY
3629 VBR_RATECTRL_INFO vbr_rc_info;
3632#if CONFIG_RATECTRL_LOG
3636 RATECTRL_LOG rc_log;
3644#if CONFIG_THREE_PASS
3648 THIRD_PASS_DEC_CTX *third_pass_ctx;
3679#if !CONFIG_REALTIME_ONLY
3702#if CONFIG_SALIENCY_MAP
3706 uint8_t *saliency_map;
3711 double *sm_scaling_factor;
3752 YV12_BUFFER_CONFIG *source;
3753 YV12_BUFFER_CONFIG *last_source;
3754 int64_t ts_duration;
3773 int primary_ref_frame;
3783 int refresh_frame_flags;
3785 int show_existing_frame;
3786 int existing_fb_idx_to_show;
3813void av1_initialize_enc(
unsigned int usage,
enum aom_rc_mode end_usage);
3817 struct BufferPool *
const pool,
3818 COMPRESSOR_STAGE stage,
3819 int lap_lag_in_frames);
3822 struct aom_codec_pkt_list *pkt_list_head,
int num_lap_buffers,
3827void av1_remove_primary_compressor(
AV1_PRIMARY *ppi);
3829#if CONFIG_ENTROPY_STATS
3832#if CONFIG_INTERNAL_STATS
3837 bool *sb_size_changed);
3840 bool sb_size_changed);
3843 int subsampling_x,
int subsampling_y);
3848void av1_release_scaled_references_fpmt(
AV1_COMP *
cpi);
3850void av1_decrement_ref_counts_fpmt(BufferPool *buffer_pool,
3851 int ref_buffers_used_map);
3853void av1_init_sc_decisions(
AV1_PRIMARY *
const ppi);
3858int av1_init_parallel_frame_context(
const AV1_COMP_DATA *
const first_cpi_data,
3860 int *ref_buffers_used_map);
3881 const YV12_BUFFER_CONFIG *sd, int64_t time_stamp,
3882 int64_t end_time_stamp);
3916 size_t *
const frame_size);
3919int av1_get_preview_raw_frame(
AV1_COMP *
cpi, YV12_BUFFER_CONFIG *dest);
3921int av1_get_last_show_frame(
AV1_COMP *
cpi, YV12_BUFFER_CONFIG *frame);
3924 YV12_BUFFER_CONFIG *new_frame,
3925 YV12_BUFFER_CONFIG *sd);
3927int av1_use_as_reference(
int *ext_ref_frame_flags,
int ref_frame_flags);
3929int av1_copy_reference_enc(
AV1_COMP *
cpi,
int idx, YV12_BUFFER_CONFIG *sd);
3931int av1_set_reference_enc(
AV1_COMP *
cpi,
int idx, YV12_BUFFER_CONFIG *sd);
3933void av1_set_frame_size(
AV1_COMP *
cpi,
int width,
int height);
3937int av1_set_roi_map(
AV1_COMP *
cpi,
unsigned char *map,
unsigned int rows,
3938 unsigned int cols,
int delta_q[8],
int delta_lf[8],
3939 int skip[8],
int ref_frame[8]);
3941int av1_set_active_map(
AV1_COMP *
cpi,
unsigned char *map,
int rows,
int cols);
3943int av1_get_active_map(
AV1_COMP *
cpi,
unsigned char *map,
int rows,
int cols);
3954int av1_convert_sect5obus_to_annexb(uint8_t *buffer,
size_t buffer_size,
3955 size_t *input_size);
3957void av1_alloc_mb_wiener_var_pred_buf(AV1_COMMON *cm, ThreadData *td);
3959void av1_dealloc_mb_wiener_var_pred_buf(ThreadData *td);
3961uint8_t av1_find_dominant_value(
const uint8_t *src,
int stride,
int rows,
3964void av1_dilate_block(
const uint8_t *src,
int src_stride, uint8_t *dilated,
3965 int dilated_stride,
int rows,
int cols);
3978void av1_set_screen_content_options(
struct AV1_COMP *
cpi,
3983void av1_set_svc_seq_params(
AV1_PRIMARY *
const ppi);
3990static inline void init_ref_map_pair(
3991 AV1_COMP *cpi, RefFrameMapPair ref_frame_map_pairs[REF_FRAMES]) {
3993 memset(ref_frame_map_pairs, -1,
sizeof(*ref_frame_map_pairs) * REF_FRAMES);
3996 memset(ref_frame_map_pairs, 0,
sizeof(*ref_frame_map_pairs) * REF_FRAMES);
3997 for (
int map_idx = 0; map_idx < REF_FRAMES; map_idx++) {
4000 if (ref_frame_map_pairs[map_idx].disp_order == -1)
continue;
4002 ref_frame_map_pairs[map_idx].disp_order = -1;
4003 ref_frame_map_pairs[map_idx].pyr_level = -1;
4005 }
else if (buf->ref_count > 1) {
4011 for (
int idx2 = map_idx + 1; idx2 < REF_FRAMES; ++idx2) {
4014 ref_frame_map_pairs[idx2].disp_order = -1;
4015 ref_frame_map_pairs[idx2].pyr_level = -1;
4019 ref_frame_map_pairs[map_idx].disp_order = (int)buf->display_order_hint;
4020 ref_frame_map_pairs[map_idx].pyr_level = buf->pyramid_level;
4025static inline void calc_frame_data_update_flag(
4026 GF_GROUP *
const gf_group,
int gf_frame_index,
4027 bool *
const do_frame_data_update) {
4028 *do_frame_data_update =
true;
4031 if (gf_group->frame_parallel_level[gf_frame_index] == 1) {
4032 *do_frame_data_update =
false;
4033 }
else if (gf_group->frame_parallel_level[gf_frame_index] == 2) {
4035 for (
int i = gf_frame_index + 1; i < gf_group->size; i++) {
4036 if ((gf_group->frame_parallel_level[i] == 0 &&
4037 (gf_group->update_type[i] == ARF_UPDATE ||
4038 gf_group->update_type[i] == INTNL_ARF_UPDATE)) ||
4039 gf_group->frame_parallel_level[i] == 1) {
4041 }
else if (gf_group->frame_parallel_level[i] == 2) {
4042 *do_frame_data_update =
false;
4051#define TICKS_PER_SEC 10000000LL
4053static inline int64_t timebase_units_to_ticks(
4054 const aom_rational64_t *timestamp_ratio, int64_t n) {
4055 return n * timestamp_ratio->num / timestamp_ratio->den;
4058static inline int64_t ticks_to_timebase_units(
4059 const aom_rational64_t *timestamp_ratio, int64_t n) {
4060 int64_t round = timestamp_ratio->num / 2;
4061 if (round > 0) --round;
4062 return (n * timestamp_ratio->den + round) / timestamp_ratio->num;
4065static inline int frame_is_kf_gf_arf(
const AV1_COMP *cpi) {
4067 const FRAME_UPDATE_TYPE update_type =
4070 return frame_is_intra_only(&cpi->
common) || update_type == ARF_UPDATE ||
4071 update_type == GF_UPDATE;
4075static inline int av1_use_hash_me(
const AV1_COMP *
const cpi) {
4078 frame_is_intra_only(&cpi->
common));
4081static inline const YV12_BUFFER_CONFIG *get_ref_frame_yv12_buf(
4082 const AV1_COMMON *
const cm, MV_REFERENCE_FRAME ref_frame) {
4083 const RefCntBuffer *
const buf = get_ref_frame_buf(cm, ref_frame);
4084 return buf != NULL ? &buf->buf : NULL;
4087static inline void alloc_frame_mvs(AV1_COMMON *
const cm, RefCntBuffer *buf) {
4088 assert(buf != NULL);
4089 ensure_mv_buffer(buf, cm);
4090 buf->width = cm->
width;
4091 buf->height = cm->
height;
4096static inline unsigned int allocated_tokens(
const TileInfo *tile,
4097 int sb_size_log2,
int num_planes) {
4099 ROUND_POWER_OF_TWO(tile->mi_row_end - tile->mi_row_start, 2);
4101 ROUND_POWER_OF_TWO(tile->mi_col_end - tile->mi_col_start, 2);
4103 return get_token_alloc(tile_mb_rows, tile_mb_cols, sb_size_log2, num_planes);
4106static inline void get_start_tok(
AV1_COMP *cpi,
int tile_row,
int tile_col,
4107 int mi_row, TokenExtra **tok,
int sb_size_log2,
4109 AV1_COMMON *
const cm = &cpi->
common;
4111 TileDataEnc *this_tile = &cpi->
tile_data[tile_row * tile_cols + tile_col];
4112 const TileInfo *
const tile_info = &this_tile->tile_info;
4114 const int tile_mb_cols =
4115 (tile_info->mi_col_end - tile_info->mi_col_start + 2) >> 2;
4116 const int tile_mb_row = (mi_row - tile_info->mi_row_start + 2) >> 2;
4118 *tok = cpi->
token_info.tile_tok[tile_row][tile_col] +
4119 get_token_alloc(tile_mb_row, tile_mb_cols, sb_size_log2, num_planes);
4124#define ALT_MIN_LAG 3
4125static inline int is_altref_enabled(
int lag_in_frames,
bool enable_auto_arf) {
4126 return lag_in_frames >= ALT_MIN_LAG && enable_auto_arf;
4129static inline int can_disable_altref(
const GFConfig *gf_cfg) {
4130 return is_altref_enabled(gf_cfg->lag_in_frames, gf_cfg->enable_auto_arf) &&
4131 (gf_cfg->gf_min_pyr_height == 0);
4135static inline int get_num_blocks(
const int frame_length,
const int mb_length) {
4136 return (frame_length + mb_length - 1) / mb_length;
4140static inline int is_stat_generation_stage(
const AV1_COMP *
const cpi) {
4147static inline int is_stat_consumption_stage_twopass(
const AV1_COMP *
const cpi) {
4152static inline int is_stat_consumption_stage(
const AV1_COMP *
const cpi) {
4153 return (is_stat_consumption_stage_twopass(cpi) ||
4156 cpi->
oxcf.mode != REALTIME));
4160static inline bool av1_need_dv_costs(
const AV1_COMP *
const cpi) {
4161 return (!cpi->
sf.
rt_sf.use_nonrd_pick_mode || cpi->
sf.
rt_sf.rt_use_intrabc) &&
4162 av1_allow_intrabc(&cpi->
common) && !is_stat_generation_stage(cpi);
4183static inline int is_one_pass_rt_lag_params(
const AV1_COMP *cpi) {
4185 cpi->
oxcf.gf_cfg.lag_in_frames > 0 && cpi->
oxcf.mode == REALTIME;
4188static inline int is_one_pass_rt_params(
const AV1_COMP *cpi) {
4190 (cpi->
oxcf.mode == REALTIME || cpi->
svc.number_spatial_layers > 1);
4194static inline int use_rtc_reference_structure_one_layer(
const AV1_COMP *cpi) {
4201static inline int allow_postencode_drop_rtc(
const AV1_COMP *cpi) {
4202 const AV1_COMMON *
const cm = &cpi->
common;
4205 !cpi->
rc.rtc_external_ratectrl && !frame_is_intra_only(cm) &&
4206 cpi->
svc.spatial_layer_id == 0;
4210static inline int get_stats_buf_size(
int num_lap_buffer,
int num_lag_buffer) {
4212 if (num_lap_buffer > 0) {
4213 return AOMMAX(num_lap_buffer + 1, MAX_GF_LENGTH_LAP + 1);
4215 return num_lag_buffer;
4220static inline void set_ref_ptrs(
const AV1_COMMON *cm, MACROBLOCKD *xd,
4221 MV_REFERENCE_FRAME ref0,
4222 MV_REFERENCE_FRAME ref1) {
4224 get_ref_scale_factors_const(cm, ref0 >= LAST_FRAME ? ref0 : 1);
4226 get_ref_scale_factors_const(cm, ref1 >= LAST_FRAME ? ref1 : 1);
4229static inline int get_chessboard_index(
int frame_index) {
4230 return frame_index & 0x1;
4233static inline const int *cond_cost_list_const(
const struct AV1_COMP *cpi,
4234 const int *cost_list) {
4235 const int use_cost_list = cpi->
sf.
mv_sf.subpel_search_method != SUBPEL_TREE &&
4236 cpi->
sf.
mv_sf.use_fullpel_costlist;
4237 return use_cost_list ? cost_list : NULL;
4240static inline int *cond_cost_list(
const struct AV1_COMP *cpi,
int *cost_list) {
4241 const int use_cost_list = cpi->
sf.
mv_sf.subpel_search_method != SUBPEL_TREE &&
4242 cpi->
sf.
mv_sf.use_fullpel_costlist;
4243 return use_cost_list ? cost_list : NULL;
4247double av1_get_compression_ratio(
const AV1_COMMON *
const cm,
4248 size_t encoded_frame_size);
4250void av1_new_framerate(
AV1_COMP *cpi,
double framerate);
4252void av1_setup_frame_size(
AV1_COMP *cpi);
4254#define LAYER_IDS_TO_IDX(sl, tl, num_tl) ((sl) * (num_tl) + (tl))
4257static inline int av1_resize_scaled(
const AV1_COMMON *cm) {
4262static inline int av1_frame_scaled(
const AV1_COMMON *cm) {
4263 return av1_superres_scaled(cm) || av1_resize_scaled(cm);
4266static inline bool av1_encode_for_extrc(AOM_EXT_RATECTRL
const *ext_rc) {
4267 return ext_rc->ready && (ext_rc->funcs.rc_type & AOM_RC_QP) != 0 &&
4268 ext_rc->funcs.get_encodeframe_decision != NULL;
4274static inline int encode_show_existing_frame(
const AV1_COMMON *cm) {
4281static inline int get_mi_ext_idx(
const int mi_row,
const int mi_col,
4282 const BLOCK_SIZE mi_alloc_bsize,
4283 const int mbmi_ext_stride) {
4284 const int mi_ext_size_1d = mi_size_wide[mi_alloc_bsize];
4285 const int mi_ext_row = mi_row / mi_ext_size_1d;
4286 const int mi_ext_col = mi_col / mi_ext_size_1d;
4287 return mi_ext_row * mbmi_ext_stride + mi_ext_col;
4292static inline void set_pixels_to_frame_edge(
MACROBLOCK *x,
int bw,
int bh,
4293 int mi_col,
int mi_row,
int mi_cols,
4294 int mi_rows,
int frame_width,
4296 bool do_border_pad) {
4302 int boundary_frame_width =
4303 do_border_pad ? frame_width : (mi_cols << MI_SIZE_LOG2);
4304 int boundary_frame_height =
4305 do_border_pad ? frame_height : (mi_rows << MI_SIZE_LOG2);
4308 boundary_frame_height - ((mi_row + bh) << MI_SIZE_LOG2);
4314static inline void set_mode_info_offsets(
4317 MACROBLOCKD *
const xd,
int mi_row,
int mi_col) {
4318 set_mi_offsets(mi_params, xd, mi_row, mi_col);
4319 const int ext_idx = get_mi_ext_idx(mi_row, mi_col, mi_params->
mi_alloc_bsize,
4327static inline BLOCK_SIZE find_partition_size(BLOCK_SIZE bsize,
int rows_left,
4328 int cols_left,
int *bh,
int *bw) {
4329 int int_size = (int)bsize;
4330 if (rows_left <= 0 || cols_left <= 0) {
4331 return AOMMIN(bsize, BLOCK_8X8);
4333 for (; int_size > 0; int_size -= 3) {
4334 *bh = mi_size_high[int_size];
4335 *bw = mi_size_wide[int_size];
4336 if ((*bh <= rows_left) && (*bw <= cols_left)) {
4341 return (BLOCK_SIZE)int_size;
4344static const uint8_t av1_ref_frame_flag_list[REF_FRAMES] = { 0,
4355static const MV_REFERENCE_FRAME disable_order[] = {
4362static const MV_REFERENCE_FRAME
4363 ref_frame_priority_order[INTER_REFS_PER_FRAME] = {
4364 LAST_FRAME, ALTREF_FRAME, BWDREF_FRAME, GOLDEN_FRAME,
4365 ALTREF2_FRAME, LAST2_FRAME, LAST3_FRAME,
4368static inline int get_ref_frame_flags(
const SPEED_FEATURES *
const sf,
4369 const int use_one_pass_rt_params,
4370 const YV12_BUFFER_CONFIG **ref_frames,
4371 const int ext_ref_frame_flags) {
4376 int flags = ext_ref_frame_flags;
4378 for (
int i = 1; i < INTER_REFS_PER_FRAME; ++i) {
4379 const YV12_BUFFER_CONFIG *
const this_ref = ref_frames[i];
4384 (use_one_pass_rt_params && ref_frame_priority_order[i] == GOLDEN_FRAME)
4385 ? (1 + sf->
rt_sf.use_nonrd_altref_frame)
4387 for (
int j = 0; j < index; ++j) {
4391 if (this_ref == ref_frames[j] &&
4392 (flags & (1 << (ref_frame_priority_order[j] - 1)))) {
4393 flags &= ~(1 << (ref_frame_priority_order[i] - 1));
4412#define MAX_GFUBOOST_FACTOR 10.0
4413#define MIN_GFUBOOST_FACTOR 4.0
4415static inline int is_frame_tpl_eligible(
const GF_GROUP *
const gf_group,
4417 const FRAME_UPDATE_TYPE update_type = gf_group->update_type[index];
4418 return update_type == ARF_UPDATE || update_type == GF_UPDATE ||
4419 update_type == KF_UPDATE;
4422static inline int is_frame_eligible_for_ref_pruning(
const GF_GROUP *gf_group,
4423 int selective_ref_frame,
4424 int prune_ref_frames,
4426 return (selective_ref_frame > 0) && (prune_ref_frames > 0) &&
4427 !is_frame_tpl_eligible(gf_group, gf_index);
4431static inline FRAME_UPDATE_TYPE get_frame_update_type(
const GF_GROUP *gf_group,
4432 int gf_frame_index) {
4433 return gf_group->update_type[gf_frame_index];
4436static inline int av1_pixels_to_mi(
int pixels) {
4437 return ALIGN_POWER_OF_TWO(pixels, 3) >> MI_SIZE_LOG2;
4440static inline int is_psnr_calc_enabled(
const AV1_COMP *cpi) {
4441 const AV1_COMMON *
const cm = &cpi->
common;
4447static inline int is_frame_resize_pending(
const AV1_COMP *
const cpi) {
4450 return (resize_pending_params->
width && resize_pending_params->
height &&
4456static inline int is_loopfilter_used(
const AV1_COMMON *
const cm) {
4461static inline int is_cdef_used(
const AV1_COMMON *
const cm) {
4467static inline int is_restoration_used(
const AV1_COMMON *
const cm) {
4477static inline unsigned int derive_skip_apply_postproc_filters(
4478 const AV1_COMP *cpi,
int use_loopfilter,
int use_cdef,
int use_superres,
4479 int use_restoration) {
4486 return (SKIP_APPLY_LOOPFILTER | SKIP_APPLY_CDEF);
4490 assert(cpi->
oxcf.mode == ALLINTRA);
4499 if (use_restoration)
return SKIP_APPLY_RESTORATION;
4500 if (use_superres)
return SKIP_APPLY_SUPERRES;
4507 ? (SKIP_APPLY_LOOPFILTER | SKIP_APPLY_CDEF)
4510 if (use_loopfilter)
return SKIP_APPLY_LOOPFILTER;
4517static inline void set_postproc_filter_default_params(AV1_COMMON *cm) {
4518 struct loopfilter *
const lf = &cm->
lf;
4522 lf->filter_level[0] = 0;
4523 lf->filter_level[1] = 0;
4524 lf->backup_filter_level[0] = 0;
4525 lf->backup_filter_level[1] = 0;
4535static inline int is_inter_tx_size_search_level_one(
4536 const TX_SPEED_FEATURES *tx_sf) {
4537 return (tx_sf->inter_tx_size_search_init_depth_rect >= 1 &&
4538 tx_sf->inter_tx_size_search_init_depth_sqr >= 1);
4542 int lpf_opt_level = 0;
4543 if (is_inter_tx_size_search_level_one(&sf->
tx_sf))
4544 lpf_opt_level = (sf->
lpf_sf.lpf_pick == LPF_PICK_FROM_Q) ? 2 : 1;
4545 return lpf_opt_level;
4549static inline bool is_switchable_motion_mode_allowed(
bool allow_warped_motion,
4551 return (allow_warped_motion || enable_obmc);
4554static inline int warped_motion_update_num_proj_ref(
4556 return cpi->
oxcf.motion_mode_cfg.allow_warped_motion && is_inter_block(mi) &&
4557 !mi->
skip_mode && is_motion_variation_allowed_bsize(mi->
bsize) &&
4558 !has_second_ref(mi);
4561#if CONFIG_AV1_TEMPORAL_DENOISING
4562static inline int denoise_svc(
const struct AV1_COMP *
const cpi) {
4565 cpi->
svc.spatial_layer_id >= cpi->
svc.first_layer_denoise));
4569#if CONFIG_COLLECT_PARTITION_STATS == 2
4570static inline void av1_print_fr_partition_timing_stats(
4571 const FramePartitionTimingStats *part_stats,
const char *filename) {
4572 FILE *f = fopen(filename,
"w");
4577 fprintf(f,
"bsize,redo,");
4578 for (
int part = 0; part < EXT_PARTITION_TYPES; part++) {
4579 fprintf(f,
"decision_%d,", part);
4581 for (
int part = 0; part < EXT_PARTITION_TYPES; part++) {
4582 fprintf(f,
"attempt_%d,", part);
4584 for (
int part = 0; part < EXT_PARTITION_TYPES; part++) {
4585 fprintf(f,
"time_%d,", part);
4589 static const int bsizes[6] = { 128, 64, 32, 16, 8, 4 };
4591 for (
int bsize_idx = 0; bsize_idx < 6; bsize_idx++) {
4592 fprintf(f,
"%d,%d,", bsizes[bsize_idx], part_stats->partition_redo);
4593 for (
int part = 0; part < EXT_PARTITION_TYPES; part++) {
4594 fprintf(f,
"%d,", part_stats->partition_decisions[bsize_idx][part]);
4596 for (
int part = 0; part < EXT_PARTITION_TYPES; part++) {
4597 fprintf(f,
"%d,", part_stats->partition_attempts[bsize_idx][part]);
4599 for (
int part = 0; part < EXT_PARTITION_TYPES; part++) {
4600 fprintf(f,
"%ld,", part_stats->partition_times[bsize_idx][part]);
4608#if CONFIG_COLLECT_PARTITION_STATS
4609static inline int av1_get_bsize_idx_for_part_stats(BLOCK_SIZE bsize) {
4610 assert(bsize == BLOCK_128X128 || bsize == BLOCK_64X64 ||
4611 bsize == BLOCK_32X32 || bsize == BLOCK_16X16 || bsize == BLOCK_8X8 ||
4612 bsize == BLOCK_4X4);
4614 case BLOCK_128X128:
return 0;
4615 case BLOCK_64X64:
return 1;
4616 case BLOCK_32X32:
return 2;
4617 case BLOCK_16X16:
return 3;
4618 case BLOCK_8X8:
return 4;
4619 case BLOCK_4X4:
return 5;
4620 default: assert(0 &&
"Invalid bsize for partition_stats.");
return -1;
4625#if CONFIG_COLLECT_COMPONENT_TIMING
4626static inline void start_timing(
AV1_COMP *cpi,
int component) {
4627 aom_usec_timer_start(&cpi->component_timer[component]);
4629static inline void end_timing(
AV1_COMP *cpi,
int component) {
4630 aom_usec_timer_mark(&cpi->component_timer[component]);
4631 cpi->frame_component_time[component] +=
4632 aom_usec_timer_elapsed(&cpi->component_timer[component]);
4634static inline char const *get_frame_type_enum(
int type) {
4636 case 0:
return "KEY_FRAME";
4637 case 1:
return "INTER_FRAME";
4638 case 2:
return "INTRA_ONLY_FRAME";
4639 case 3:
return "S_FRAME";
enum aom_chroma_sample_position aom_chroma_sample_position_t
List of chroma sample positions.
enum aom_transfer_characteristics aom_transfer_characteristics_t
List of supported transfer functions.
enum aom_color_range aom_color_range_t
List of supported color range.
enum aom_color_primaries aom_color_primaries_t
List of supported color primaries.
enum aom_matrix_coefficients aom_matrix_coefficients_t
List of supported matrix coefficients.
Provides definitions for using AOM or AV1 encoder algorithm within the aom Codec Interface.
struct macroblock MACROBLOCK
Encoder's parameters related to the current coding block.
COST_UPDATE_TYPE
This enum controls how often the entropy costs should be updated.
Definition encoder.h:211
@ COST_UPD_SBROW
Definition encoder.h:213
@ COST_UPD_TILE
Definition encoder.h:214
@ COST_UPD_OFF
Definition encoder.h:215
@ NUM_COST_UPDATE_TYPES
Definition encoder.h:216
@ COST_UPD_SB
Definition encoder.h:212
LOOPFILTER_CONTROL
This enum controls to which frames loopfilter is applied.
Definition encoder.h:222
@ LOOPFILTER_ALL
Definition encoder.h:224
@ LOOPFILTER_SELECTIVELY
Definition encoder.h:226
@ LOOPFILTER_REFERENCE
Definition encoder.h:225
@ LOOPFILTER_NONE
Definition encoder.h:223
#define NUM_RECODES_PER_FRAME
Max number of recodes used to track the frame probabilities.
Definition encoder.h:1647
struct inter_modes_info InterModesInfo
Struct used to hold inter mode data for fast tx search.
SKIP_APPLY_POSTPROC_FILTER
This enum controls the application of post-processing filters on a reconstructed frame.
Definition encoder.h:234
#define MAX_PARALLEL_FRAMES
Max number of frames that can be encoded in a parallel encode set.
Definition encoder.h:1652
RestorationType
This enumeration defines various restoration types supported.
Definition enums.h:609
@ RESTORE_NONE
Definition enums.h:610
@ RESTORE_SWITCHABLE_TYPES
Definition enums.h:614
@ RESTORE_TYPES
Definition enums.h:615
aom_dist_metric
Distortion metric to use for RD optimization.
Definition aomcx.h:1823
aom_tune_content
AV1 encoder content type.
Definition aomcx.h:1733
enum aom_scaling_mode_1d AOM_SCALING_MODE
aom 1-D scaling mode
aom_tune_metric
Model tuning parameters.
Definition aomcx.h:1776
struct aom_roi_map aom_roi_map_t
aom region of interest map
aom_screen_detection_mode
Screen content detection mode.
Definition aomcx.h:1741
enum aom_bit_depth aom_bit_depth_t
Bit depth for codecThis enumeration determines the bit depth of the codec.
enum aom_superblock_size aom_superblock_size_t
Superblock size selection.
aom_codec_err_t
Algorithm return codes.
Definition aom_codec.h:155
aom_superres_mode
Frame super-resolution mode.
Definition aom_encoder.h:207
aom_rc_mode
Rate control mode.
Definition aom_encoder.h:185
aom_enc_pass
Multi-pass Encoding Pass.
Definition aom_encoder.h:176
struct aom_fixed_buf aom_fixed_buf_t
Generic fixed size buffer structure.
long aom_enc_frame_flags_t
Encoded Frame Flags.
Definition aom_encoder.h:377
@ AOM_CBR
Definition aom_encoder.h:187
@ AOM_RC_ONE_PASS
Definition aom_encoder.h:177
@ AOM_RC_SECOND_PASS
Definition aom_encoder.h:179
@ AOM_RC_FIRST_PASS
Definition aom_encoder.h:178
int av1_get_compressed_data(AV1_COMP *cpi, AV1_COMP_DATA *const cpi_data)
Encode a frame.
Definition encoder.c:5359
int av1_encode(AV1_COMP *const cpi, uint8_t *const dest, size_t dest_size, const EncodeFrameInput *const frame_input, const EncodeFrameParams *const frame_params, size_t *const frame_size)
Run 1-pass/2-pass encoding.
Definition encoder.c:4535
int av1_receive_raw_frame(AV1_COMP *cpi, aom_enc_frame_flags_t frame_flags, const YV12_BUFFER_CONFIG *sd, int64_t time_stamp, int64_t end_time_stamp)
Obtain the raw frame data.
Definition encoder.c:4736
static int has_no_stats_stage(const AV1_COMP *const cpi)
Check if the current stage has statistics.
Definition encoder.h:4174
Describes look ahead buffer operations.
@ CDEF_PICK_FROM_Q
Definition speed_features.h:172
RestorationInfo rst_info[3]
Definition av1_common_int.h:962
int superres_upscaled_width
Definition av1_common_int.h:815
int superres_upscaled_height
Definition av1_common_int.h:816
SequenceHeader * seq_params
Definition av1_common_int.h:992
int width
Definition av1_common_int.h:791
CdefInfo cdef_info
Definition av1_common_int.h:971
CurrentFrame current_frame
Definition av1_common_int.h:770
int show_existing_frame
Definition av1_common_int.h:916
struct loopfilter lf
Definition av1_common_int.h:955
FeatureFlags features
Definition av1_common_int.h:921
int show_frame
Definition av1_common_int.h:901
RefCntBuffer * ref_frame_map[REF_FRAMES]
Definition av1_common_int.h:894
CommonTileParams tiles
Definition av1_common_int.h:1008
int height
Definition av1_common_int.h:792
int render_width
Definition av1_common_int.h:802
int render_height
Definition av1_common_int.h:803
Encoder data related to multi-threading for allintra deltaq-mode=3.
Definition encoder.h:1617
pthread_mutex_t * mutex_
Definition encoder.h:1622
void(* intra_sync_read_ptr)(AV1EncRowMultiThreadSync *const, int, int)
Definition encoder.h:1636
pthread_cond_t * cond_
Definition encoder.h:1626
void(* intra_sync_write_ptr)(AV1EncRowMultiThreadSync *const, int, int, int)
Definition encoder.h:1640
Encoder data related to row-based multi-threading.
Definition encoder.h:1527
int allocated_sb_rows
Definition encoder.h:1566
pthread_mutex_t * mutex_
Definition encoder.h:1592
int allocated_tile_cols
Definition encoder.h:1535
bool firstpass_mt_exit
Definition encoder.h:1579
int allocated_cols
Definition encoder.h:1549
int thread_id_to_tile_id[64]
Definition encoder.h:1554
bool mb_wiener_mt_exit
Definition encoder.h:1586
void(* sync_write_ptr)(AV1EncRowMultiThreadSync *const, int, int, int)
Definition encoder.h:1610
pthread_cond_t * cond_
Definition encoder.h:1596
bool row_mt_exit
Definition encoder.h:1572
int allocated_tile_rows
Definition encoder.h:1531
int allocated_rows
Definition encoder.h:1542
int * num_tile_cols_done
Definition encoder.h:1560
void(* sync_read_ptr)(AV1EncRowMultiThreadSync *const, int, int)
Definition encoder.h:1606
Encoder parameters for synchronization of row based multi-threading.
Definition encoder.h:1407
int rows
Definition encoder.h:1440
int sync_range
Definition encoder.h:1429
int intrabc_extra_top_right_sb_delay
Definition encoder.h:1436
int next_mi_row
Definition encoder.h:1444
int * num_finished_cols
Definition encoder.h:1422
pthread_mutex_t * mutex_
Definition encoder.h:1413
pthread_cond_t * cond_
Definition encoder.h:1414
int num_threads_working
Definition encoder.h:1448
Main encoder configuration data structure.
Definition encoder.h:944
RateControlCfg rc_cfg
Definition encoder.h:966
KeyFrameCfg kf_cfg
Definition encoder.h:961
enum aom_enc_pass pass
Definition encoder.h:1072
AlgoCfg algo_cfg
Definition encoder.h:956
aom_fixed_buf_t twopass_stats_in
Definition encoder.h:983
Structure to hold search parameter per restoration unit and intermediate buffer of Wiener filter used...
Definition encoder.h:1706
RestUnitSearchInfo * rusi[3]
Definition encoder.h:1711
int16_t * dgd_avg
Definition encoder.h:1716
Structure to hold data corresponding to an encoded frame.
Definition encoder.h:2550
int64_t ts_frame_end
Definition encoder.h:2579
int pop_lookahead
Definition encoder.h:2594
int64_t ts_frame_start
Definition encoder.h:2574
unsigned char * cx_data
Definition encoder.h:2554
size_t cx_data_sz
Definition encoder.h:2559
int flush
Definition encoder.h:2584
unsigned int lib_flags
Definition encoder.h:2569
size_t frame_size
Definition encoder.h:2564
const aom_rational64_t * timestamp_ratio
Definition encoder.h:2589
Top level encoder structure.
Definition encoder.h:2907
double * ext_rate_distribution
Definition encoder.h:3598
int do_update_frame_probs_warp[10]
Definition encoder.h:3298
uint8_t * consec_zero_mv
Definition encoder.h:3513
int do_update_frame_probs_obmc[10]
Definition encoder.h:3293
struct aom_denoise_and_model_t * denoise_and_model
Definition encoder.h:3380
int skip_tpl_setup_stats
Definition encoder.h:3015
int frames_since_last_update
Definition encoder.h:3689
int * mb_delta_q
Definition encoder.h:3618
int vaq_refresh
Definition encoder.h:3268
FRAME_TYPE last_frame_type
Definition encoder.h:3478
YV12_BUFFER_CONFIG * unscaled_source
Definition encoder.h:2983
int palette_pixel_num
Definition encoder.h:3718
CYCLIC_REFRESH * cyclic_refresh
Definition encoder.h:3160
RATE_CONTROL rc
Definition encoder.h:3119
int deltaq_used
Definition encoder.h:3436
ActiveMap active_map
Definition encoder.h:3165
bool frame_size_related_setup_done
Definition encoder.h:3231
WeberStats * mb_weber_stats
Definition encoder.h:3586
bool refresh_idx_available
Definition encoder.h:3551
TokenInfo token_info
Definition encoder.h:3263
int64_t ambient_err
Definition encoder.h:3088
aom_film_grain_table_t * film_grain_table
Definition encoder.h:3373
int ref_refresh_index
Definition encoder.h:3545
int keep_comp_ref_frame_mask
Definition encoder.h:3358
SPEED_FEATURES sf
Definition encoder.h:3139
TRELLIS_OPT_TYPE optimize_seg_arr[8]
Definition encoder.h:2961
ExtPartController ext_part_controller
Definition encoder.h:3535
FILE * second_pass_log_stream
Definition encoder.h:3654
double * ssim_rdmult_scaling_factors
Definition encoder.h:3448
RD_OPT rd
Definition encoder.h:3093
int data_alloc_height
Definition encoder.h:3217
AomTplGopStats extrc_tpl_gop_stats
Definition encoder.h:3739
int num_tg
Definition encoder.h:3483
WinnerModeParams winner_mode_params
Definition encoder.h:3109
ExternalFlags ext_flags
Definition encoder.h:3071
bool alloc_pyramid
Definition encoder.h:3700
EncSegmentationInfo enc_seg
Definition encoder.h:3155
MotionVectorSearchParams mv_search_params
Definition encoder.h:3144
int use_screen_content_tools
Definition encoder.h:3395
int do_update_frame_probs_interpfilter[10]
Definition encoder.h:3303
CODING_CONTEXT coding_context
Definition encoder.h:3099
TemporalFilterCtx tf_ctx
Definition encoder.h:3035
ForceIntegerMVInfo force_intpel_info
Definition encoder.h:3045
GlobalMotionInfo gm_info
Definition encoder.h:3104
int consec_zero_mv_alloc_size
Definition encoder.h:3518
CoeffBufferPool coeff_buffer_pool
Definition encoder.h:2945
FRAME_INDEX_SET frame_index_set
Definition encoder.h:3203
int ref_frame_flags
Definition encoder.h:3129
RefCntBuffer * scaled_ref_buf[INTER_REFS_PER_FRAME]
Definition encoder.h:3051
unsigned char gf_frame_index
Definition encoder.h:3170
AV1EncoderConfig oxcf
Definition encoder.h:2955
AV1_COMMON common
Definition encoder.h:2950
AV1LrStruct lr_ctxt
Definition encoder.h:3363
bool do_frame_data_update
Definition encoder.h:3574
CdefSearchCtx * cdef_search_ctx
Definition encoder.h:3040
int data_alloc_width
Definition encoder.h:3210
int do_update_frame_probs_txtype[10]
Definition encoder.h:3288
FRAME_COUNTS counts
Definition encoder.h:2927
COMPRESSOR_STAGE compressor_stage
Definition encoder.h:3472
int intrabc_used
Definition encoder.h:3339
int num_frame_recode
Definition encoder.h:3278
int rt_reduce_num_ref_buffers
Definition encoder.h:3066
RefreshFrameInfo refresh_frame
Definition encoder.h:3061
int prune_ref_frame_mask
Definition encoder.h:3344
YV12_BUFFER_CONFIG * unscaled_last_source
Definition encoder.h:2993
int all_one_sided_refs
Definition encoder.h:3150
MultiThreadInfo mt_info
Definition encoder.h:3327
VarBasedPartitionInfo vbp_info
Definition encoder.h:3273
int scaled_last_source_available
Definition encoder.h:3724
YV12_BUFFER_CONFIG * last_source
Definition encoder.h:2977
int existing_fb_idx_to_show
Definition encoder.h:3334
YV12_BUFFER_CONFIG * unfiltered_source
Definition encoder.h:3004
unsigned int zeromv_skip_thresh_exit_part[BLOCK_SIZES_ALL]
Definition encoder.h:3694
FRAME_INFO frame_info
Definition encoder.h:3198
int last_coded_height
Definition encoder.h:3243
int frame_header_count
Definition encoder.h:3431
int droppable
Definition encoder.h:3193
RefCntBuffer * last_show_frame_buf
Definition encoder.h:3056
aom_superres_mode superres_mode
Definition encoder.h:3490
MBMIExtFrameBufferInfo mbmi_ext_info
Definition encoder.h:2932
AV1LrPickStruct pick_lr_ctxt
Definition encoder.h:3368
double new_framerate
Definition encoder.h:3317
AV1_PRIMARY * ppi
Definition encoder.h:2911
uint64_t * src_sad_blk_64x64
Definition encoder.h:3659
int64_t norm_wiener_variance
Definition encoder.h:3613
double * tpl_rdmult_scaling_factors
Definition encoder.h:3030
int sb_counter
Definition encoder.h:3529
int last_coded_width
Definition encoder.h:3237
TileDataEnc * tile_data
Definition encoder.h:3254
int is_screen_content_type
Definition encoder.h:3403
BLOCK_SIZE weber_bsize
Definition encoder.h:3608
InterpSearchFlags interp_search_flags
Definition encoder.h:3386
TimeStamps time_stamps
Definition encoder.h:3114
aom_roi_map_t roi
Definition encoder.h:3729
int ref_idx_to_skip
Definition encoder.h:3558
YV12_BUFFER_CONFIG orig_source
Definition encoder.h:3010
int src_sad_blk_alloc_size
Definition encoder.h:3664
FirstPassData firstpass_data
Definition encoder.h:3495
double framerate
Definition encoder.h:3124
int speed
Definition encoder.h:3134
BLOCK_SIZE fp_block_size
Definition encoder.h:3523
int use_ducky_encode
Definition encoder.h:3677
YV12_BUFFER_CONFIG trial_frame_rst
Definition encoder.h:3083
bool is_dropped_frame
Definition encoder.h:3623
ThreadData td
Definition encoder.h:2922
ResizePendingParams resize_pending_params
Definition encoder.h:3248
YV12_BUFFER_CONFIG scaled_source
Definition encoder.h:2988
int cb_delta_rdmult_enabled
Definition encoder.h:3020
int do_update_vbr_bits_off_target_fast
Definition encoder.h:3322
YV12_BUFFER_CONFIG last_frame_uf
Definition encoder.h:3077
EncQuantDequantParams enc_quant_dequant_params
Definition encoder.h:2917
int keep_single_ref_frame_mask
Definition encoder.h:3351
RefFrameDistanceInfo ref_frame_dist_info
Definition encoder.h:3441
int * prep_rate_estimates
Definition encoder.h:3592
DuckyEncodeInfo ducky_encode_info
Definition encoder.h:3683
double ext_rate_scale
Definition encoder.h:3603
int initial_mbs
Definition encoder.h:3225
uint64_t rec_sse
Definition encoder.h:3671
YV12_BUFFER_CONFIG scaled_last_source
Definition encoder.h:2998
MV_STATS mv_stats
Definition encoder.h:3541
FrameProbInfo frame_new_probs[10]
Definition encoder.h:3283
AOM_EXT_RATECTRL ext_ratectrl
Definition encoder.h:3734
YV12_BUFFER_CONFIG * source
Definition encoder.h:2968
int allocated_tiles
Definition encoder.h:3258
bool do_border_pad
Definition encoder.h:3744
SVC svc
Definition encoder.h:3467
CB_COEFF_BUFFER * coeff_buffer_base
Definition encoder.h:2939
NOISE_ESTIMATE noise_estimate
Definition encoder.h:3500
TWO_PASS_FRAME twopass_frame
Definition encoder.h:3642
Top level primary encoder structure.
Definition encoder.h:2600
int num_fp_contexts
Definition encoder.h:2657
AV1EncRowMultiThreadSync intra_row_mt_sync
Definition encoder.h:2894
bool buffer_removal_time_present
Definition encoder.h:2775
int valid_gm_model_found[FRAME_UPDATE_TYPES]
Definition encoder.h:2883
struct aom_codec_pkt_list * output_pkt_list
Definition encoder.h:2705
int filter_level[2]
Definition encoder.h:2662
SequenceHeader seq_params
Definition encoder.h:2765
MV_STATS mv_stats
Definition encoder.h:2813
struct AV1_COMP * cpi
Definition encoder.h:2678
AV1LevelParams level_params
Definition encoder.h:2735
int internal_altref_allowed
Definition encoder.h:2710
RTC_REF rtc_ref
Definition encoder.h:2888
int b_calculate_psnr
Definition encoder.h:2740
PrimaryMultiThreadInfo p_mt_info
Definition encoder.h:2870
TEMPORAL_FILTER_INFO tf_info
Definition encoder.h:2760
TWO_PASS twopass
Definition encoder.h:2750
int frames_left
Definition encoder.h:2745
int64_t ts_start_last_show_frame
Definition encoder.h:2647
PRIMARY_RATE_CONTROL p_rc
Definition encoder.h:2755
int lap_enabled
Definition encoder.h:2730
FrameProbInfo frame_probs
Definition encoder.h:2875
int show_existing_alt_ref
Definition encoder.h:2715
int fb_of_context_type[REF_FRAMES]
Definition encoder.h:2865
int use_svc
Definition encoder.h:2770
double * tpl_sb_rdmult_scaling_factors
Definition encoder.h:2803
int filter_level_v
Definition encoder.h:2672
int filter_level_u
Definition encoder.h:2667
struct AV1_COMP * cpi_lap
Definition encoder.h:2683
struct AV1_COMP * parallel_cpi[4]
Definition encoder.h:2604
int64_t ts_end_last_show_frame
Definition encoder.h:2652
struct lookahead_ctx * lookahead
Definition encoder.h:2688
RefCntBuffer * ref_frame_map_copy[REF_FRAMES]
Definition encoder.h:2642
GF_STATE gf_state
Definition encoder.h:2725
aom_variance_fn_ptr_t fn_ptr[BLOCK_SIZES_ALL]
Definition encoder.h:2797
GF_GROUP gf_group
Definition encoder.h:2720
struct AV1_COMP_DATA parallel_frames_data[4 - 1]
Definition encoder.h:2610
TplParams tpl_data
Definition encoder.h:2808
unsigned int number_temporal_layers
Definition encoder.h:2780
unsigned int number_spatial_layers
Definition encoder.h:2785
int b_freeze_internal_state
Definition encoder.h:2901
int seq_params_locked
Definition encoder.h:2699
struct aom_internal_error_info error
Definition encoder.h:2790
Algorithm configuration parameters.
Definition encoder.h:815
int disable_trellis_quant
Definition encoder.h:843
int sharpness
Definition encoder.h:829
bool skip_postproc_filtering
Definition encoder.h:887
int mode_ref_delta_enabled
Definition encoder.h:893
bool enable_adaptive_sharpness
Definition encoder.h:834
int arnr_max_frames
Definition encoder.h:848
aom_screen_detection_mode screen_detection_mode
Definition encoder.h:898
bool enable_tpl_model
Definition encoder.h:866
LOOPFILTER_CONTROL loopfilter_control
Definition encoder.h:881
uint8_t cdf_update_mode
Definition encoder.h:861
bool enable_overlay
Definition encoder.h:872
int arnr_strength
Definition encoder.h:853
Stores the transforms coefficients for the whole superblock.
Definition block.h:209
The stucture of CYCLIC_REFRESH.
Definition aq_cyclicrefresh.h:36
Parameters related to CDEF.
Definition av1_common_int.h:203
int cdef_bits
Number of CDEF strength values in bits.
Definition av1_common_int.h:225
int cdef_uv_strengths[16]
CDEF strength values for chroma.
Definition av1_common_int.h:223
int cdef_strengths[16]
CDEF strength values for luma.
Definition av1_common_int.h:221
int nb_cdef_strengths
Number of CDEF strength values.
Definition av1_common_int.h:219
Definition encoder.h:2456
uint8_t * entropy_ctx
Definition encoder.h:2468
tran_low_t * tcoeff
Definition encoder.h:2460
uint16_t * eobs
Definition encoder.h:2464
Params related to MB_MODE_INFO arrays and related info.
Definition av1_common_int.h:511
BLOCK_SIZE mi_alloc_bsize
Definition av1_common_int.h:560
int cols
Definition av1_common_int.h:438
unsigned int large_scale
Definition av1_common_int.h:498
Encoder flags for compound prediction modes.
Definition encoder.h:389
bool enable_masked_comp
Definition encoder.h:398
bool enable_diff_wtd_comp
Definition encoder.h:406
bool enable_smooth_interintra
Definition encoder.h:402
bool enable_interintra_wedge
Definition encoder.h:414
bool enable_interinter_wedge
Definition encoder.h:410
bool enable_dist_wtd_comp
Definition encoder.h:393
Segmentation related information for the current frame.
Definition encoder.h:2419
uint8_t * map
Definition encoder.h:2425
bool has_lossless_segment
Definition encoder.h:2431
contains per-frame encoding parameters decided upon by av1_encode_strategy() and passed down to av1_e...
Definition encoder.h:3762
int error_resilient_mode
Definition encoder.h:3766
int remapped_ref_idx[REF_FRAMES]
Definition encoder.h:3797
int ref_frame_flags
Definition encoder.h:3792
int speed
Definition encoder.h:3808
FRAME_TYPE frame_type
Definition encoder.h:3770
int show_frame
Definition encoder.h:3780
RefreshFrameInfo refresh_frame
Definition encoder.h:3803
Frame refresh flags set by the external interface.
Definition encoder.h:2284
bool golden_frame
Definition encoder.h:2286
bool bwd_ref_frame
Definition encoder.h:2287
bool update_pending
Definition encoder.h:2293
bool last_frame
Definition encoder.h:2285
bool alt_ref_frame
Definition encoder.h:2289
bool alt2_ref_frame
Definition encoder.h:2288
Flags signalled by the external interface at frame level.
Definition encoder.h:2299
bool use_primary_ref_none
Definition encoder.h:2340
bool use_ref_frame_mvs
Definition encoder.h:2324
ExtRefreshFrameFlagsInfo refresh_frame
Definition encoder.h:2308
int ref_frame_flags
Definition encoder.h:2303
bool use_error_resilient
Definition encoder.h:2329
bool use_s_frame
Definition encoder.h:2334
bool refresh_frame_context
Definition encoder.h:2313
bool refresh_frame_context_pending
Definition encoder.h:2319
Frame level features.
Definition av1_common_int.h:368
bool allow_screen_content_tools
Definition av1_common_int.h:385
bool allow_intrabc
Definition av1_common_int.h:386
bool coded_lossless
Definition av1_common_int.h:395
bool error_resilient_mode
Definition av1_common_int.h:410
bool all_lossless
Definition av1_common_int.h:399
Encoder info used for decision on forcing integer motion vectors.
Definition encoder.h:1878
double cs_rate_array[32]
Definition encoder.h:1883
int rate_size
Definition encoder.h:1891
int rate_index
Definition encoder.h:1887
Encoder-side probabilities for pruning of various AV1 tools.
Definition encoder.h:1135
int switchable_interp_probs[FRAME_UPDATE_TYPES][((SWITCHABLE_FILTERS+1) *4)][SWITCHABLE_FILTERS]
Definition encoder.h:1165
int obmc_probs[FRAME_UPDATE_TYPES][BLOCK_SIZES_ALL]
Definition encoder.h:1141
int warped_probs[FRAME_UPDATE_TYPES]
Definition encoder.h:1148
int tx_type_probs[FRAME_UPDATE_TYPES][TX_SIZES_ALL][TX_TYPES]
Definition encoder.h:1156
Data related to the current GF/ARF group and the individual frames within the group.
Definition firstpass.h:343
Parameters related to global motion search.
Definition encoder.h:2087
FrameDistPair reference_frames[2][REF_FRAMES - 1]
Definition encoder.h:2113
bool search_done
Definition encoder.h:2091
int segment_map_h
Definition encoder.h:2120
int num_ref_frames[2]
Definition encoder.h:2105
YV12_BUFFER_CONFIG * ref_buf[REF_FRAMES]
Definition encoder.h:2098
int segment_map_w
Definition encoder.h:2119
Flags related to interpolation filter search.
Definition encoder.h:2127
int default_interp_skip_flags
Definition encoder.h:2132
uint16_t interp_filter_search_mask
Definition encoder.h:2136
Encoder flags for intra prediction.
Definition encoder.h:292
bool enable_diagonal_intra
Definition encoder.h:322
bool enable_smooth_intra
Definition encoder.h:305
bool auto_intra_tools_off
Definition encoder.h:341
bool enable_filter_intra
Definition encoder.h:301
bool enable_directional_intra
Definition encoder.h:317
bool enable_paeth_intra
Definition encoder.h:309
bool enable_intra_edge_filter
Definition encoder.h:296
bool enable_cfl_intra
Definition encoder.h:313
bool enable_angle_delta
Definition encoder.h:327
Encoder config related to the coding of key frames.
Definition encoder.h:456
int key_freq_max
Definition encoder.h:465
int sframe_mode
Definition encoder.h:483
bool auto_key
Definition encoder.h:488
bool enable_intrabc
Definition encoder.h:508
int sframe_dist
Definition encoder.h:476
bool enable_sframe
Definition encoder.h:503
int enable_keyframe_filtering
Definition encoder.h:470
int fwd_kf_dist
Definition encoder.h:493
int key_freq_min
Definition encoder.h:460
bool fwd_kf_enabled
Definition encoder.h:498
Buffer to store mode information at mi_alloc_bsize (4x4 or 8x8) level.
Definition encoder.h:1924
int alloc_size
Definition encoder.h:1933
int stride
Definition encoder.h:1937
MB_MODE_INFO_EXT_FRAME * frame_base
Definition encoder.h:1929
Stores best extended mode information at frame level.
Definition block.h:245
Stores the prediction/txfm mode of the current coding block.
Definition blockd.h:222
uint8_t skip_mode
Inter skip mode.
Definition blockd.h:316
BLOCK_SIZE bsize
The block size of the current coding block.
Definition blockd.h:228
Parameters for motion vector search process.
Definition encoder.h:2142
int max_mv_magnitude
Definition encoder.h:2148
fractional_mv_step_fp * find_fractional_mv_step
Definition encoder.h:2162
int mv_step_param
Definition encoder.h:2153
search_site_config search_site_cfg[SS_CFG_TOTAL][NUM_DISTINCT_SEARCH_METHODS]
Definition encoder.h:2169
Encoder parameters related to multi-threading.
Definition encoder.h:1769
RestoreStateBuffers restore_state_buf
Definition encoder.h:1856
AV1CdefWorkerData * cdef_worker
Definition encoder.h:1851
AV1LrSync lr_row_sync
Definition encoder.h:1826
struct EncWorkerData * tile_thr_data
Definition encoder.h:1789
AV1TplRowMultiThreadInfo tpl_row_mt
Definition encoder.h:1816
AV1EncPackBSSync pack_bs_sync
Definition encoder.h:1831
AV1EncRowMultiThreadInfo enc_row_mt
Definition encoder.h:1805
AV1LfSync lf_row_sync
Definition encoder.h:1821
AV1CdefSync cdef_sync
Definition encoder.h:1846
int num_mod_workers[NUM_MT_MODULES]
Definition encoder.h:1778
AV1EncAllIntraMultiThreadInfo intra_mt
Definition encoder.h:1811
int num_workers
Definition encoder.h:1773
int pipeline_lpf_mt_with_enc
Definition encoder.h:1862
AVxWorker * workers
Definition encoder.h:1783
bool pack_bs_mt_enabled
Definition encoder.h:1800
bool row_mt_enabled
Definition encoder.h:1795
AV1TemporalFilterSync tf_sync
Definition encoder.h:1841
AV1GlobalMotionSync gm_sync
Definition encoder.h:1836
Primary Rate Control parameters and status.
Definition ratectrl.h:313
Encoder config for coding block partitioning.
Definition encoder.h:264
bool enable_rect_partitions
Definition encoder.h:268
bool enable_1to4_partitions
Definition encoder.h:276
BLOCK_SIZE max_partition_size
Definition encoder.h:286
bool enable_ab_partitions
Definition encoder.h:272
BLOCK_SIZE min_partition_size
Definition encoder.h:281
Primary Encoder parameters related to multi-threading.
Definition encoder.h:1722
struct EncWorkerData * tile_thr_data
Definition encoder.h:1742
AV1CdefWorkerData * cdef_worker
Definition encoder.h:1747
int num_workers
Definition encoder.h:1726
int prev_num_enc_workers
Definition encoder.h:1763
AVxWorker * workers
Definition encoder.h:1736
AVxWorker * p_workers[4]
Definition encoder.h:1753
int p_num_workers
Definition encoder.h:1758
int num_mod_workers[NUM_MT_MODULES]
Definition encoder.h:1731
Rate Control parameters and status.
Definition ratectrl.h:134
Encoder rate control configuration parameters.
Definition encoder.h:514
int worst_allowed_q
Definition encoder.h:584
int over_shoot_pct
Definition encoder.h:579
unsigned int max_intra_bitrate_pct
Definition encoder.h:549
int drop_frames_water_mark
Definition encoder.h:567
int max_consec_drop_ms
Definition encoder.h:622
int vbrmax_section
Definition encoder.h:615
int64_t maximum_buffer_size_ms
Definition encoder.h:533
unsigned int vbr_corpus_complexity_lap
Definition encoder.h:544
unsigned int min_cr
Definition encoder.h:563
int force_max_q
Definition encoder.h:626
int vbrbias
Definition encoder.h:605
unsigned int gf_cbr_boost_pct
Definition encoder.h:558
int vbrmin_section
Definition encoder.h:610
enum aom_rc_mode mode
Definition encoder.h:598
unsigned int max_inter_bitrate_pct
Definition encoder.h:554
int64_t starting_buffer_level_ms
Definition encoder.h:523
int best_allowed_q
Definition encoder.h:589
int under_shoot_pct
Definition encoder.h:573
int64_t target_bandwidth
Definition encoder.h:538
int64_t optimal_buffer_level_ms
Definition encoder.h:528
int cq_level
Definition encoder.h:593
Refrence frame distance related variables.
Definition encoder.h:2201
int8_t nearest_past_ref
Definition encoder.h:2209
int ref_relative_dist[INTER_REFS_PER_FRAME]
Definition encoder.h:2205
int8_t nearest_future_ref
Definition encoder.h:2213
Refresh frame flags for different type of frames.
Definition encoder.h:2180
bool bwd_ref_frame
Definition encoder.h:2182
bool golden_frame
Definition encoder.h:2181
bool alt_ref_frame
Definition encoder.h:2183
Encoder config related to resize.
Definition encoder.h:244
uint8_t resize_scale_denominator
Definition encoder.h:253
uint8_t resize_kf_scale_denominator
Definition encoder.h:258
RESIZE_MODE resize_mode
Definition encoder.h:248
Desired dimensions for an externally triggered resize.
Definition encoder.h:2193
int width
Definition encoder.h:2194
int height
Definition encoder.h:2195
Parameters related to restoration types.
Definition encoder.h:1683
RestorationType best_rtype[RESTORE_TYPES - 1]
Definition encoder.h:1698
WienerInfo wiener
Definition encoder.h:1687
SgrprojInfo sgrproj
Definition encoder.h:1692
Parameters related to Restoration Info.
Definition restoration.h:246
RestorationType frame_restoration_type
Definition restoration.h:250
Buffers to be backed up during parallel encode set to be restored later.
Definition encoder.h:1658
int32_t * rst_tmpbuf
Definition encoder.h:1672
RestorationLineBuffers * rlbs
Definition encoder.h:1677
uint16_t * cdef_colbuf[3]
Definition encoder.h:1667
uint16_t * cdef_srcbuf
Definition encoder.h:1662
Top level speed vs quality trade off data struture.
Definition speed_features.h:2100
MV_SPEED_FEATURES mv_sf
Definition speed_features.h:2129
LOOP_FILTER_SPEED_FEATURES lpf_sf
Definition speed_features.h:2164
TX_SPEED_FEATURES tx_sf
Definition speed_features.h:2149
REAL_TIME_SPEED_FEATURES rt_sf
Definition speed_features.h:2169
The stucture of SVC.
Definition svc_layercontext.h:89
Parameters related to Sgrproj Filter.
Definition blockd.h:507
Encoder config related to frame super-resolution.
Definition encoder.h:420
uint8_t superres_kf_scale_denominator
Definition encoder.h:442
aom_superres_mode superres_mode
Definition encoder.h:446
int superres_kf_qthresh
Definition encoder.h:430
bool enable_superres
Definition encoder.h:450
uint8_t superres_scale_denominator
Definition encoder.h:436
int superres_qthresh
Definition encoder.h:425
Temporal filter info for a gop.
Definition temporal_filter.h:164
Frame level Two pass status and control data.
Definition firstpass.h:467
Two pass status and control data.
Definition firstpass.h:425
Parameters related to temporal filtering.
Definition temporal_filter.h:101
Frame time stamps.
Definition encoder.h:2437
int64_t prev_ts_start
Definition encoder.h:2441
int64_t first_ts_start
Definition encoder.h:2449
int64_t prev_ts_end
Definition encoder.h:2445
Params related to temporal dependency model.
Definition tpl_model.h:168
Encoder flags for transform sizes and types.
Definition encoder.h:347
bool enable_tx64
Definition encoder.h:351
bool use_inter_dct_only
Definition encoder.h:374
bool enable_flip_idtx
Definition encoder.h:355
bool use_intra_default_tx_only
Definition encoder.h:379
bool use_intra_dct_only
Definition encoder.h:369
bool enable_rect_tx
Definition encoder.h:359
bool reduced_tx_type_set
Definition encoder.h:364
bool enable_tx_size_search
Definition encoder.h:383
Thresholds for variance based partitioning.
Definition encoder.h:1386
int64_t thresholds[5]
Definition encoder.h:1395
int64_t threshold_minmax
Definition encoder.h:1401
Parameters related to Wiener Filter.
Definition blockd.h:494
Parameters used for winner mode processing.
Definition encoder.h:2231
unsigned int use_transform_domain_distortion[MODE_EVAL_TYPES]
Definition encoder.h:2253
TX_SIZE_SEARCH_METHOD tx_size_search_methods[MODE_EVAL_TYPES]
Definition encoder.h:2245
unsigned int skip_txfm_level[MODE_EVAL_TYPES]
Definition encoder.h:2267
unsigned int coeff_opt_thresholds[MODE_EVAL_TYPES][2]
Definition encoder.h:2239
unsigned int tx_domain_dist_threshold[MODE_EVAL_TYPES]
Definition encoder.h:2260
unsigned int predict_dc_level[MODE_EVAL_TYPES]
Definition encoder.h:2274
Struct used to hold inter mode data for fast tx search.
Definition encoder.h:1291
RD_STATS rd_cost_arr[MAX_INTER_MODES]
Definition encoder.h:1320
int64_t est_rd_arr[MAX_INTER_MODES]
Definition encoder.h:1312
int64_t sse_arr[MAX_INTER_MODES]
Definition encoder.h:1308
RD_STATS rd_cost_y_arr[MAX_INTER_MODES]
Definition encoder.h:1324
RD_STATS rd_cost_uv_arr[MAX_INTER_MODES]
Definition encoder.h:1328
MB_MODE_INFO mbmi_arr[MAX_INTER_MODES]
Definition encoder.h:1300
RdIdxPair rd_idx_pair_arr[MAX_INTER_MODES]
Definition encoder.h:1316
int mode_rate_arr[MAX_INTER_MODES]
Definition encoder.h:1304
int num
Definition encoder.h:1296
MB_MODE_INFO_EXT_FRAME * mbmi_ext_frame
Finalized mbmi_ext for the whole frame.
Definition block.h:921
int pix_to_bottom_edge
Signed vertical distance, in pixels, from the bottom edge of the current prediction block to the bott...
Definition block.h:1448
int pix_to_right_edge
Signed horizontal distance, in pixels, from the right edge of the current prediction block to the rig...
Definition block.h:1456
const struct scale_factors * block_ref_scale_factors[2]
Definition blockd.h:687